5 import java
.util
.ArrayList
;
6 import java
.util
.Observable
;
7 import java
.util
.Observer
;
8 import java
.util
.Scanner
;
11 public class GraphModel
extends Observable
implements Observer
{
12 private List
<GraphEdge
> edges
;
13 private List
<GraphVertex
> vertexes
;
16 public GraphVertex
[] getVertexes(){
17 GraphVertex
[] a
= new GraphVertex
[vertexes
.size()];
18 return vertexes
.toArray(a
);
20 public GraphEdge
[] getEdges(){
21 GraphEdge
[] a
= new GraphEdge
[edges
.size()];
22 return edges
.toArray(a
);
26 edges
= new ArrayList
<GraphEdge
>();
27 vertexes
= new ArrayList
<GraphVertex
>();
30 public synchronized void setChanged() {
35 public void addEdge(GraphEdge
... edge
){
36 for(int i
=0; i
< edge
.length
; i
++){
38 edge
[i
].addObserver(this);
43 public void addGraph(GraphVertex
... vertex
){
44 for(int i
=0; i
< vertex
.length
; i
++){
45 vertexes
.add(vertex
[i
]);
46 vertex
[i
].addObserver(this);
51 public void removeEdge(GraphEdge
... edge
){
52 for(int i
=0; i
< edge
.length
; i
++){
53 edges
.remove(edge
[i
]);
54 edge
[i
].deleteObserver(this);
58 public void removeGraph(GraphVertex
... vertex
){
59 for(int i
=0; i
< vertex
.length
; i
++){
60 vertexes
.remove(vertex
[i
]);
61 vertex
[i
].deleteObserver(this);
66 public GraphVertex
getGraphByCoordinate(int x
, int y
){
67 for(int i
=0; i
< vertexes
.size(); i
++){
68 if(vertexes
.get(i
).isAt(x
, y
))
69 return vertexes
.get(i
);
75 public void update(Observable arg0
, Object arg1
) {
76 if(vertexes
.contains(arg0
) || edges
.contains(arg0
)){
81 public void writeToFile(File file
) throws Exception
83 FileOutputStream fos
= new FileOutputStream(file
);
84 OutputStreamWriter out
= new OutputStreamWriter(fos
, "UTF-8");
86 out
.write(vertexes
.size() + " " + edges
.size() + "\r\n");
87 for(int i
=0; i
< vertexes
.size(); i
++)
88 out
.write(vertexes
.get(i
).getX() + " " + vertexes
.get(i
).getY() + " " + vertexes
.get(i
).getWidth() + " " + vertexes
.get(i
).getHeight() +" "+ vertexes
.get(i
).getName() + "\r\n");
89 for(int i
=0; i
< edges
.size(); i
++)
90 out
.write(vertexes
.indexOf(edges
.get(i
).getEdge(false)) + " " + vertexes
.indexOf(edges
.get(i
).getEdge(true)) + "\r\n");
97 public void writeToFile(String file
) throws Exception
99 writeToFile(new File(file
));
102 private static GraphVertex
[] readVertexes(int count
, Scanner s
)
104 GraphVertex
[] vertexes
= new GraphVertex
[count
];
105 for(int i
=0; i
< count
; i
++)
106 vertexes
[i
] = new GraphVertex(s
);
111 public static GraphModel
fromFile(File file
) throws Exception
113 GraphModel model
= new GraphModel();
114 Scanner scanner
= new Scanner(file
, "UTF-8");
116 int numKnopen
= scanner
.nextInt();
117 int numKanten
= scanner
.nextInt();
120 GraphVertex
[] vertexes
= readVertexes(numKnopen
,scanner
);
121 GraphEdge
[] edges
= readKanten(scanner
, numKanten
, vertexes
);
123 model
.addEdge(edges
);
124 model
.addGraph(vertexes
);
128 private static GraphEdge
[] readKanten(Scanner scanner
, int numKanten
,
129 GraphVertex
[] vertexes
) {
130 GraphEdge
[] edges
= new GraphEdge
[numKanten
];
131 for (int i
= 0; i
< numKanten
; i
++) {
132 int obj1
= scanner
.nextInt();
133 int obj2
= scanner
.nextInt();
134 edges
[i
] = new GraphEdge(vertexes
[obj1
], vertexes
[obj2
]);
135 if(i
!= (numKanten
-1)){
143 public static GraphModel
fromFile(String fileName
) throws Exception
145 File file
= new File(fileName
);
146 return fromFile(file
);